home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #1 / Amiga Plus CD - 1997 - No. 01.iso / pd / programmierung / proasm / routines / conoc.r < prev    next >
Text File  |  1992-11-03  |  4KB  |  209 lines

  1.  
  2. ;---;  conoc.r  ;----------------------------------------------------------
  3. *
  4. *    ****    SINGLE CONSOLE WINDOW OPEN/CLOSE    ****
  5. *
  6. *    Author        Stefan Walter
  7. *    Version        0.10
  8. *    Last Revision    16.09.92
  9. *    Identifier    coc_defined
  10. *    Prefix        coc_    (Console open and close)
  11. *                 ¯       ¯        ¯
  12. *    Functions    ConOpen, ConClose, GetConHandle
  13. *
  14. *    Flags        coc_ALTERNATIVE set 1 if alternative window used
  15. *            coc_PRINTTITLE set 1 if title shall be printed
  16. *
  17. ;------------------------------------------------------------------------------
  18.  
  19. ;------------------
  20.     ifnd    coc_defined
  21. coc_defined    =1
  22.  
  23. ;------------------
  24. coc_oldbase    equ __base
  25.     base    coc_base
  26. coc_base:
  27.  
  28. ;------------------
  29.  
  30. ;------------------------------------------------------------------------------
  31. *
  32. * ConOpen    Open a console window with specs at label 'coc_ConWindow'.
  33. *        If it doesn't open, try an alternative window at
  34. *        'coc_AltConWindow'. If it opens, print a title text at
  35. *        'coc_Title'. If first window doesn't open, and second does,
  36. *        the text at 'coc_AltErrMsg' is printed. Multiple open
  37. *        attempts are handled. Title printing and alternative window
  38. *        usage can be chosen with flags.
  39. *
  40. * RESULT:    d0    Handle or 0
  41. *
  42. ;------------------------------------------------------------------------------
  43.  
  44. ;------------------
  45. ConOpen:
  46.  
  47. ;------------------
  48. ; Start:
  49. ;
  50. \start:
  51.     movem.l    d1-a6,-(sp)
  52.     lea    coc_base(pc),a4
  53.     move.l    coc_window(pc),d0
  54.     bne.s    \done            ;window is open...
  55.     bsr    OpenDosLib
  56.     beq.s    \done
  57.  
  58. ;------------------
  59. ; Try to open default window.
  60. ;
  61. \trydefault:
  62.     pea    coc_ConWindow(pc)
  63.     move.l    (sp)+,d1
  64.     move.l    #1005,d2            ;old
  65.     jsr    -30(a6)            ;Open()
  66.     move.l    d0,coc_window(a4)    
  67.     beq.s    \trysecond
  68.     move.l    d0,d1
  69.     bsr    SetConHandles
  70.  
  71. ;------------------
  72. ; Test if window is interactive (that means no file).
  73. ;
  74. \testinteractive:    
  75.     move.l    d0,d1
  76.     jsr    -216(a6)        ;IsInteractive()
  77.     moveq    #0,d6
  78.     tst.l    d0
  79.     beq.s    \nogood            ;it is NOT interactive
  80.  
  81.     ifd    coc_PRINTTITLE
  82.     lea    coc_Title(pc),a0
  83.     bsr    ConPrint
  84.     endif
  85.  
  86.     move.l    coc_window(pc),d0
  87.     bra.s    \done
  88.  
  89. \nogood:
  90.     move.l    coc_window(pc),d1
  91.     clr.l    coc_window(a4)
  92.     jsr    -36(a6)            ;Close()
  93.  
  94. ;------------------
  95.     ifd    coc_ALTERNATIVE
  96.  
  97. ;------------------
  98. ; Try to open alternative window.
  99. ;    
  100. \trysecond:
  101.     pea    coc_AltConWindow(pc)
  102.     move.l    (sp)+,d1
  103.     move.l    #1005,d2            ;old
  104.     jsr    -30(a6)            ;Open()
  105.     move.l    d0,coc_window(a4)
  106.     beq.s    \done
  107.     move.l    d0,d1
  108.     bsr    SetConHandles
  109.  
  110.     ifd    coc_PRINTTITLE
  111.     lea    coc_Title(pc),a0
  112.     bsr    ConPrint
  113.     endif
  114.  
  115.     lea    coc_AltErrMsg(pc),a0
  116.     bsr    ConPrint
  117.  
  118. ;------------------
  119.     else
  120.  
  121. ;------------------
  122. ; No alternate window.
  123. ;
  124. \trysecond:
  125.     moveq    #0,d0
  126.  
  127. ;------------------
  128.     endif
  129.  
  130. ;------------------
  131. ; Done.
  132. ;
  133. \done:
  134.     tst.l    d0
  135.     movem.l    (sp)+,d1-a6
  136.     rts
  137.  
  138. ;------------------
  139.  
  140. ;------------------------------------------------------------------------------
  141. *
  142. * ConClose    Close console window.
  143. *
  144. ;------------------------------------------------------------------------------
  145.  
  146. ;------------------
  147. ConClose:
  148.  
  149. ;------------------
  150. ; Start:
  151. ;
  152. \start:
  153.     movem.l    d0-a6,-(sp)
  154.     bsr    GetDosBase
  155.     lea    coc_window(pc),a4
  156.     move.l    (a4),d1
  157.     beq.s    \no
  158.     clr.l    (a4)
  159.     jsr    -36(a6)            ;Close()
  160. \no:
  161.     movem.l    (sp)+,d0-a6
  162.     rts
  163.  
  164. ;------------------
  165.     
  166. ;------------------------------------------------------------------------------
  167. *
  168. * GetConHandle    Get console handle.
  169. *
  170. * RESULT:    d1    Handle
  171. *
  172. ;------------------------------------------------------------------------------
  173.  
  174. ;------------------
  175. GetConHandle:
  176.  
  177. ;------------------
  178. ; Start.
  179. ;
  180. \start:
  181.     move.l    coc_window(pc),d1
  182.     rts
  183.  
  184. ;------------------
  185.  
  186. ;--------------------------------------------------------------------
  187.  
  188. ;------------------
  189.     include    doslib.r
  190.     include    conio.r
  191.  
  192. ;------------------
  193. ; Data.
  194. ;
  195. coc_window:    dc.l    0
  196.  
  197. ;------------------
  198.  
  199. ;--------------------------------------------------------------------
  200.  
  201. ;------------------
  202.     base    coc_oldbase
  203.  
  204. ;------------------
  205.     endif
  206.  
  207.     end
  208.  
  209.